﻿using System.Collections.Generic;

namespace Algorytm
{
    public class Algorytm_Grupa_Przedmiotow
    {
        public int numer;
        public List<int> lista_przedmiotow;
        public Algorytm_Element_Planu[][] tab;

        public Algorytm_Grupa_Przedmiotow()
        { }

        public Algorytm_Grupa_Przedmiotow(int _numer, List<int> lista)
        {
            Algorytm_Tworzenie_dla_Uczelni.p("konstruktor w grupach");
            tab = Algorytm_Tworzenie_dla_Uczelni.Init_tab();
            numer = _numer;
            lista_przedmiotow = lista;
        }

        public bool Czy_jest_miejsce_na_zajecia_grupowe(int dzien, int godzina, int dlugosc)
        {
            bool czy = true;
            for (int i = 0; i < dlugosc; i++)
            {
                if (tab[dzien][godzina + i].klasa != -1)
                {
                    if (tab[dzien][godzina + i].czy_grupowe)
                    {
                        czy = czy && !tab[dzien][godzina + i].czy_jest_drugi_przedmiot;
                    }
                }
            }
            return czy;
        }

        public bool czy_moga_byc_zajecia(int dzien, int godzina, int dlugosc)
        {
            bool czy = true;
            if (godzina + dlugosc > Algorytm_Tworzenie_dla_Uczelni.liczba_godzin_w_dniu) return false;
            for (int i = 0; i < dlugosc; i++)
            {
                if (tab[dzien][godzina + i].klasa != -1) return false;
            }

            return czy;
        }

        public void Dodaj_skojarzenie_do_planu_awaryjnego(Algorytm_Element_Planu element, int dzien, int godzina, int dlugosc)
        {
            tab[dzien][godzina] = element;
            Algorytm_Element_Planu el = new Algorytm_Element_Planu(element.klasa, element.nauczyciel, element.przedmiot, element.sala, element.dlugosc, element.czy_grupowe);
            for (int i = 1; i < dlugosc; i++)
            {
                tab[dzien][godzina + i] = el;
                tab[dzien][godzina + i].Dodaj_jako_fragment_zajec();
            }
        }

        public void Usun_skojarzenie(int dzien, int godzina, int dlugosc)
        {
            Algorytm_Tworzenie_dla_Uczelni.p("dzien " + dzien + " godzina " + godzina + " dlugosc " + dlugosc);
            for (int i = 0; i < dlugosc; i++)
            {
                tab[dzien][godzina + i].Usun();
            }
        }

        public void Dodaj_skojarzenie(Algorytm_Element_Planu element, int dzien, int godzina, int dlugosc)
        {
            tab[dzien][godzina] = element;
            Algorytm_Element_Planu el = new Algorytm_Element_Planu(element.klasa, element.nauczyciel, element.przedmiot, element.sala, element.dlugosc, element.czy_grupowe);
            for (int i = 1; i < dlugosc; i++)
            {
                tab[dzien][godzina + i] = el;
                tab[dzien][godzina + i].Dodaj_jako_fragment_zajec();
            }
        }
    }
}